Nachdem wir uns einen Überblick über die möglichen Datenquellen verschafft haben, sind wir zum Entschluss gekommen, uns die Zensus Daten von 2011 genauer anzuschauen. Die Zensus Daten 2011 enthalten unter anderem Angaben über die Erwerbstätigkeit in Deutschland sowie unterschiedlichste soziodemografische Informationen (siehe Zensus 2011). Hinsichtlich der Arbeitslosigkeit gibt es diverse Vorurteile und Vermutungen. So wird häufig behauptet, dass der Grossteil der Arbeitslosen Personen mit Migrationshintergrund sind oder ein schlechtes Bildungsniveau vorweisen. Die Bundeszentrale für politische Bildung veröffentlichte im Jahr 2022 hierzu einen Bericht, welcher diese zwei Vermutungen sogar bestätigt (vgl. Arbeitslosenquoten nach Geschlecht und Staatsangehoerigkeit, bpb, 2021), (vgl. Arbeitslosenquoten nach Bildung und Alter, bpb, 2021). Diese Informationen waren für uns Anreiz genug, um diese Zusammenhänge zu untersuchen.
Die Fragestellung, welche wir innerhalb dieses Projekts untersuchen, lautet wie folgt:
Fragestellung
Gibt es einen Zusammenhang zwischen den soziodemografischen Merkmalen und der Arbeitslosenrate?
Die Arbeitslosigkeit im Allgemeinen ist ein Indikator für die Situation auf dem Arbeitsmarkt. Die Arbeitslosenquote kann unter Angabe der “Anzahl Erwerbslosen” sowie der “Anzahl Erwerbstätigen” berechnet werden. Als soziodemografische Merkmale haben wir uns für folgende sechs entschieden und wie folgt definiert (siehe Kapitel 5.1.1). Der Grund wieso wir uns für die 6 Merkmale entschieden haben war, da aufgrund der Zensus Umfrage die soziodemografischen Merkmale in verschiedene Kategorien aufgeteilt waren. Dies sind Informationen auf Gemeindeebene, wie z.B. Angaben zum Familienstand ((Anzahl Personen die ledig sind, verheiratet, usw.), Angaben zur Altersstruktur ((Anzahl Personen die unter 10 Jahre alt sind,zwischen 10-19 Jahre alt sind, usw.), Angaben nach Relegionszugehörigkeit ((Anzahl Personen die römisch-katholisch, evangelisch oder sonstiges) oder Angaben zum Bildungsniveau (Anzahl Personen ohne beruflischen Abschluss, mindestens eine Lehre, mindestens Hochschulabschluss, usw.). Aufgrund dieser Kategorien entschieden wir uns Quoten zu bilden, die unserer Meinung nach in einer Beziehung zur Arbeitslosenquote stehen können.
1.1 Import relevanter Module
Code
#import relevant moduluesimport pandas as pdimport altair as altimport numpy as npfrom pandas import DataFrameimport warningswarnings.simplefilter(action='ignore', category=FutureWarning)alt.data_transformers.disable_max_rows() #aus Code overview Histogrammfrom scipy import stats # to compute the mode from sklearn.linear_model import LinearRegression #Fitting a linefrom sklearn.metrics import mean_squared_errorfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import cross_val_scorefrom sklearn.metrics import r2_scorefrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import mean_absolute_errorfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LassoCVfrom sklearn.linear_model import Lassofrom sklearn.feature_selection import SequentialFeatureSelectorimport matplotlib.pyplot as plt # To visualizeimport joblibimport time
Hierbei ist zu sehen, dass 166 Spalten als Datentyp Objekt haben und somit auf gemischte Datentypen hindeutet. Im Appendix ist die ausführlicherere Version (Kapitel 5.2). In diesem ist ersichtlich, dass manche Spalten einige leere Zellen enthalten. So gibt es einige Spalten mit nur 2187 non-null Werten. Die ersten 10 Zeilen sowie die letzten 10 Zeilen des Datensatz verdeutlichen ebenso, dass nicht alle Werte nutzbar sind (siehe Tabelle 1 & Tabelle 2).
Daher führen wir im nächsten Schritt Daten Korrekturen durch, um saubere Datentypen zu haben.
1.4 Data Correction
integer in float umwandeln
/ und - in 0-Werte verwandeln, da diese im engeren Sinne als 0 zählen
Zahlen in Klammern als normale Zahlen umwandeln
Code
# integers in float verwandelnfor column in df_bevoelkerung.select_dtypes(['int64']): df_bevoelkerung[column] = df_bevoelkerung[column].astype('float64')df_bevoelkerung = df_bevoelkerung.replace('/',0)df_bevoelkerung = df_bevoelkerung.replace('-', 0)for column in df_bevoelkerung.select_dtypes('object'): df_bevoelkerung[column]=df_bevoelkerung[column].astype(str).str.extract('(\d+)').astype('float64')
Anschliessend erfolgt der Check, ob die Anpassung der Zahlen, auf Basis zweier bekannter Gemeinden mit ursprünglich nicht korrekt formatierten Werten, nun korrekt ist:
DEM_2.7
DEM_2.10
43
71.0
9.0
44
19.0
0.0
Die definierten predictor (siehe Kapitel 5.1.1)variables müssen im Folgenden noch berechnet werden:
Unter Angabe des Spaltenindex filtern wir den Dataframe, sodass wir nur noch die relevanten Spalten erhalten und kopieren diese Werte in ein neues Dataframe df_analyse:
Da mit NaN Werten nicht gerechnet werden kann müssen diese Zeilen entfernt werden. Mithilfe der .dropna Funktion entfernen wir diese Zeilen deren relevanten Spalten NaN Werte enthalten.
Anschliessend wird der Dataframe auf Hierarchie-Ebene Gemeinde gefiltert. Das neue Dataframe heißt nun df_analyse_gemeinde.
Code
# df_analyse wird über die Spalte Reg_Hier auf Gemeinde gefiltert, der Index zurückgesetzt und eine Kopie erstellt.df_analyse_gemeinde = df_analyse[df_analyse['Reg_Hier']=='Gemeinde'].reset_index(drop=True).copy()df_analyse_gemeinde
Name
Reg_Hier
Arbeitslosenquote
Migrationsquote
Christenquote
Männerquote
Akademikerquote
Beamtenquote
Singlequote
0
Flensburg, Stadt
Gemeinde
6.657547
15.957447
56.027377
49.276666
13.355639
8.378114
62.147147
1
Kiel, Landeshauptstadt
Gemeinde
7.539341
18.900021
48.656386
48.139807
17.758138
7.578323
64.350968
2
Lübeck, Hansestadt
Gemeinde
7.167394
16.812500
56.723806
47.470103
13.992802
6.540654
59.120801
3
Neumünster, Stadt
Gemeinde
6.899185
16.924489
56.149594
48.816166
8.385235
6.015860
56.965139
4
Brunsbüttel, Stadt
Gemeinde
5.365854
13.682565
62.607137
49.579243
6.877828
4.123711
51.277856
...
...
...
...
...
...
...
...
...
...
1569
Greiz, Stadt
Gemeinde
6.813820
2.112338
25.183037
47.736997
13.745338
3.089598
53.023676
1570
Zeulenroda-Triebes, Stadt
Gemeinde
5.662651
3.613666
28.863238
48.219960
12.058824
4.342273
51.721678
1571
Altenburg, Stadt
Gemeinde
9.632751
1.978736
13.745967
47.926078
13.866232
3.530979
53.276621
1572
Meuselwitz, Stadt
Gemeinde
9.363958
2.098540
11.446552
48.403867
8.841463
3.118908
49.872309
1573
Schmölln, Stadt
Gemeinde
6.430868
3.710095
19.060231
48.560444
10.587103
3.608247
51.456642
1574 rows × 9 columns
Die Ausführung der Funktion pd.info() ergibt folgende Übersicht. Unser nun bereinigter Dataframe enthält 1573 Zeilen, welcher die Basis für die Anwendung der Modelle bildet.
Im Folgenden werden die Prädikatoren sowie die Outcome-Variable definiert. Zudem werden die Daten für die Prädikatoren sowie die Outcome-Variable definiert.
Für das spätere Modell möchten wir Trainings- und Testdaten. Um die deskriptive und explorative Datenanalyse bereits auf den Trainingsdaten durchzuführen, splitten wir im nächsten Schritt die Daten. Dies machen wir mit der train_test_split-Funktion von scikit-learn.
Code
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
1.5 Descriptive Analytics
Die statistischen Werte, die mithilfer der Funktion .describe ausgegeben werden, geben ein erstes Gefühl für die bereingten Daten, welche für die Erstellung der Modelle verwendet werden.
Die Funktion .describe enthält:
Lagemasse (Mittelwert, Median)
Streuungsmasse (Standardabweichung, Quartile)
Arbeitslosenquote
Migrationsquote
Christenquote
Männerquote
Akademikerquote
Beamtenquote
Singlequote
count
1,574.00
1,574.00
1,574.00
1,574.00
1,574.00
1,574.00
1,574.00
mean
4.22
17.76
62.14
48.70
13.77
5.07
52.21
std
2.10
9.63
20.94
0.84
5.85
1.74
3.01
min
0.78
0.85
5.93
45.10
2.09
1.24
44.40
25%
2.80
10.66
58.62
48.19
9.78
3.89
50.25
50%
3.62
17.84
68.01
48.70
12.34
4.89
51.69
75%
5.02
24.11
75.94
49.18
16.24
6.02
53.66
max
16.87
53.98
93.91
54.99
48.00
18.87
66.46
1.6 Explorative Analytics
Um die Verteilung der zugrundeliegenden Daten grafisch darstellen zu können, erstellen für für jede Variable ein Histogramm. Das Histogramm für die “Christenquote” weist eine linksschiefe, multimodale Verteilung auf. Die “Männerquote” weist eine annähernd symetrische, unimodale Verteilung auf. Alle weiteren Variablen sind rechtsschief, unimodal verteilt.
Zur Visualisierung der Beziehungen zwischen Response- und Predictor Variables haben wir uns für die Anwendung von Streudiagrammen bzw. Scatter Plots entschieden. Jeden Prädikator haben wir mit der Arbeitslosenquote gegegnübergestellt, um erste Erkenntnisse gewinnen zu können (siehe Kapitel 5.3.1). Jedoch ist es anhand der Scatter Plots zunächst schwierig zu erkennen, welcher Prädikator die höchste Korrelation mit der Arbeitslosigkeit aufweist, da die berechneten Variablen unterschiedliche Werte bzw. Verteilungen auf der X-Achse annehmen und kein direkter Vergleich stattfinden kann.
Zu erkennen ist, dass lediglich die Variable “Christenquote” eine moderate Korrelation mit der Arbeitslosenquote aufweist. Zwei weitere Quoten, die noch eine leichte bis moderarte Korrelation haben sind die “Singlequote” sowie die “Migrationsquote”.
1.6.1 Pearson Correlation Koeffizienten
Unter Anwendung der Funktion .corr werden die Korrelationen berechnet und in Tabellenform ausgegeben.
Die Pearson Korrelationskoeffizienten bestätigen die oben genannten Vermutungen.
Korrelationen
Moderate Korrelation mit der Arbeitslosenquote: Christenquote
Leichte bis moderate Korrelation: Singlequote
Ausserst geringe Korrelation: Akademikerquote
2 Methodology
Wie in der Introduction beschrieben haben wir uns aufgrund der Literatur-Recherche wie auch nach Betrachtung des Data Sets für 6 Quoten entschieden, welche die Arbeitslosenquote beeinflussen könnten.
Wie in der explorativen Analyse ersichtlich geworden ist, zeigen die Christenquote, Singlequote und Migrationsquote die relativ stärksten Korrelationen auf. Daher wurde bereits an dieser Stelle beschlossen, keine weiteren Quoten in die Auswahl für die Modelle aufzunehmen. Da in den Scatterplot linere Zusammenhänge erkennbar sind, wollen wir versuchen, diese mit lineran Modellen zu erklären.
Zu Beginn der jeweiligen Modellierungsprozesse haben wir jeweils das Regressionsmodell ausgewählt. Der nächste Schritt war es die Modelle zu validieren und an die Daten anzupassen. Die Validierung haben wir mit der Cross-Validation umgesetzt und dabei den Mean Squared error pro Fold angeschaut.
Daraufhin haben wir mit der Funktion reg.fit die Modelle an die Traingsdaten angepasst und somit trainiert und den Intercept mit der y-Achse sowie den/die Koeffizienten berechnet.
Der abschließende Schritt war die Evaluierung mit den Test-Daten. Schlussendlich haben wir die Modelle anhand verschiedener Gütemaße (R^2, MSE, RMSE, MAE) bewertet.
Durch die Peer-Review haben wir das Feedback bekommen, dass wir für die Multiple Regression die Stepwise Selection nutzen könnten, was wir dann im Folgenden auch umgesetzt haben.
Diese grob beschriebenen Schritte wollen wir im Folgenden detaillierter erklären.
2.1 Lineare Regression
2.1.1 Modell-Auswahl
Zunächst werden für die einzelnen Quoten drei Modelle mit jeweils der linearen Regression definiert. Hier greifen wir auch auf scikit-learn zurück und nehmen LinearRegression als Modell.
Im nächsten Schritt werden die Modelle trainiert und validiert. Dies wird mit der Cross-Validation durchgeführt. Hierbei berechnen wir für jedes Modell den Mean-Squared-Error für je 5 Folds. Hierfür nehmen wir die Funktion cross_val_score und visualisieren das zum einen in einer Tabelle und zum anderen als Liniendiagramm. Dabei sehen wir, dass die Mean-Squared-Erros je Fold voneinander abweichen, grundsätzlich ist der MSE für die Christenqutote aber immer am geringsten, weshalb wir uns im Rahmen der linearen Regression auf die Christenquote konzentrieren.
Code
# cross-validation with 5 foldsscores_mig = cross_val_score(reg_mig, X_train[['Migrationsquote']], y_train, cv=5, scoring='neg_mean_squared_error') *-1scores_chr = cross_val_score(reg_chr, X_train[['Christenquote']], y_train, cv=5, scoring='neg_mean_squared_error') *-1scores_sin = cross_val_score(reg_sin, X_train[['Singlequote']], y_train, cv=5, scoring='neg_mean_squared_error') *-1# store cross-validation scores: Migrationsquote, Christenquote und Singlequotedf_scores = pd.DataFrame({"lr_mig": scores_mig, "lr_chr": scores_chr,"lr_sin": scores_sin})# reset index to match the number of foldsdf_scores.index +=1
lr_mig
lr_chr
lr_sin
1
4.195897
2.222005
3.502820
2
4.199023
2.844424
3.770871
3
3.451805
2.189314
2.852882
4
4.414557
2.539975
4.048354
5
3.951385
2.765169
3.716738
2.1.3 Fit Model
Im nächsten Schritt möchten wir das Modell an die Trainingsdaten anpassen und den y-Achsenabschnitt sowie die Steigung berechnen. Hierfür nutzen wir die .fit Funktion.
Dabei ergeben sich für das lineare Modell mit der Christenquote als Prädikator folgende Werte:
Name
Coefficient
0
Intercept
8.194
1
slope
-0.065
2.1.4 Evaluation on test set
Im nächsten Schritt evaulieren wir unser Modell mit den Testdaten. Dazu prognostizieren wir y-Werte, das bedeutet Arbeitslosenquoten auf Basis der Testdaten, welche diverse Christenquoten darstellen. Dies setzen wir mit der Funktion .predict um.
Für die prognostizierten Werte berechnen wir Gütemaße, wie den R-squared (R2), den Mean-Squared-Error (MSE), den Rooted-Mean-Squared-Error (RMSE) sowie den Mean-Absolute-Error (MAE).
Christenquote
R2
0.418
MSE
2.613
RMSE
1.616
MAE
1.194
2.2 Multiple Regression
2.2.1 Modell-Auswahl
Auch für die Multiple Regression nehmen wir von scikit-learn die LinearRegression als Modell. Der Unterschied zum vorherigen Abschnitt ist allerdings, dass wir hierbei mehr als eine Predictor-Variable berücksichtigen.
reg_multi=LinearRegression()
2.2.2 Training & Validation
Zuerst nehmen wir alle sechs predictor-Variablen, um das Modell der multiplen Regression zu trainieren und validieren. Hierfür nutzen wir den gleichen Cross-Validation Ansatz wie bei der linearen Regression.
Im nächsten Schritt möchten wir die Wrapper-Methoden nutzen, um zu prüfen, ob die Multiple Regression mit weniger Features besser performt und somit leichter verständlich wird. Hierfür nutzen wir von scikit-learn den SequentialFeatureSelector. Nachdem wir die Anzahl der ausgewählten Features selektiert haben und den MSE für je 5 Folds angeschaut haben, kamen wir zu der Erkenntnis, dass die Multiple Regression mit der Anzahl von 5 Features am Besten performt. Diese Variationen haben wir mit der Forward- und Backward-Selection durchgeführt.
Das Ergebnis der Backward- und Forward-Selection sind jeweils die gleichen fünf Features. Das ist eher untypisch. Obwohl der SequentialFeatureSelector bereits eine Cross-Validation mit 5 Folds durchführt, machen wir das für auch für die fünf selektierten Variablen, um die beiden multiplen Regressionen zu vergleichen.
Hierbei sehen wir, dass die Mean-Squared-Erros für die Multiple Regression mit 5 Features niedriger sind, weshalb wir im weiteren Verlauf diese 5 ausgewählten für die Multiple Regression berücksichtigen werden.
Features
1
Christenquote
2
Männerquote
3
Akademikerquote
4
Beamtenquote
5
Singlequote
2.2.3 Fit Model
In diesem Schritt werden wir wieder das Modell an die Trainingsdaten anpassen und den y-Achsenabschnitt sowie die Steigung berechnen.
Name
Coefficient
0
Intercept
20.179
1
Christenquote
-0.065
2
Männerquote
-0.427
3
Akademikerquote
-0.149
4
Beamtenquote
0.044
5
Singlequote
0.204
2.2.4 Evaluation on test set
Im nächsten Schritt evaulieren wir unser Modell mit den Testdaten. Dazu prognostizieren wir y-Werte, das bedeutet Arbeitslosenquoten auf Basis der Testdaten, welche diverse Christenquoten darstellen. Dies setzen wir erneut mit der Funktion .predict um.
Für die prognostizierten Werte berechnen wir Gütemaße, wie den R-squared (R2), den Mean-Squared-Error (MSE), den Rooted-Mean-Squared-Error (RMSE) sowie den Mean-Absolute-Error (MAE).
Christenquote
MultipleRegression
R2
0.418
0.625
MSE
2.613
1.683
RMSE
1.616
1.297
MAE
1.194
0.974
2.3 Lasso Regression
2.3.1 Modell-Auswahl
Bei der Lasso Regression ist es zuerst notwendig, die Variablen zu standardisieren, da Lasso am Besten performt, wenn die Features um den Wert 0 zentriert sind. Für diese Standardisierung definieren wir zuerst mit der StandardScaler().fit-Funktion unseren Skalierer. Diese scikit-learn Funktion entfernt den Mittelwert und skaliert jedes Feature auf eine Einheitsvarianz. Das wird für jedes Feature getrennt durchgeführt. Im nächsten Schritt transformieren wir unsere Trainings- und Testdaten mit diesem Skalierer. Für die Berechnung des alpha-Wertes für Lasso Regression nehmen wir von scikit-learn die LassoCV-Funktion, welche bereits eine Cross-Validation integriert.
# select the lasso model with built in crossvalidationreg_lasso = LassoCV(cv=5, random_state=0)
2.3.2 Training & best alpha
Die LassoCV-Funktion hat wie bereits erwähnt, die Cross Validation integriert. Somit ermittelt das Model für uns den bestmöglichen Alpha-Wert, um die Regression durchzuführen. Nachdem wir unser Modell trainiert haben, können wir uns mit .alpha_ den bestmöglichen Alpha-Wert ausgeben lassen.
reg_lasso.fit(X_train_lasso, y_train)
Das der berechnete Wert für den bestmöglichen Alpha-Wert beträgt nun:
0.00730882363957819
2.3.3 Fit Model
Anschließend nutzen wir den besten Wert für Alpha, um die Lasso Regression damit durchzuführen. Mit dem besten Wert für alpha, werden folgende Koeffizienten berechnet:
Code
# Fit the model to the complete training datalasso_best = Lasso(alpha=reg_lasso.alpha_)lasso_best.fit(X_train_lasso, y_train)
Name
Coefficient
0
Intercept
4.201
1
Migrationsquote
0.000
2
Christenquote
-1.373
3
Männerquote
-0.353
4
Akademikerquote
-0.856
5
Beamtenquote
0.060
6
Singlequote
0.609
2.3.4 Evaluation on test set
Wie in den vorherigen beiden Modellen evaluieren wir unser Modell mit den Test-Daten und prognostizieren Werte.
Für die prognostizierten Werte berechnen wir Gütemaße, wie den R-squared (R2), den Mean-Squared-Error (MSE), den Rooted-Mean-Squared-Error (RMSE) sowie den Mean-Absolute-Error (MAE).
Christenquote
MultipleRegression
Lasso
R2
0.418
0.625
0.625
MSE
2.613
1.683
1.686
RMSE
1.616
1.297
1.298
MAE
1.194
0.974
0.973
3 Results
Mithilfe der durchgeführten Analyse konnte festgestellt werden, dass die stärkste positive Korrelation (nach Pearson) zwischen der Arbeitslosenquote einer Gemeinde und dem Prädikator “Singlequote” besteht (r = +0.426). Die stärkste negative Korrelation besteht zwischen der Arbeitslosenquote einer Gemeinde und dem Prädikator “Christenquote” (r = -0.653). Die schwächste Korrelation, auf Basis unserer Daten, weist die “Akademikerquote” auf (r=-0.121).
Das Ergebnis der drei durchgeführten Modelle lautet wie folgt:
Christenquote
MultipleRegression
Lasso
R2
0.418
0.625
0.625
MSE
2.613
1.683
1.686
RMSE
1.616
1.297
1.298
MAE
1.194
0.974
0.973
Auf Basis dieser Statistiken wählen wir das Modell der Multiplen Regression um die Zusammenhänge zwischen den soziodemographischen Merkmalen und der Arbeitslosenquote zu beschreiben. Daher speichern wir das Model und stellen es im Ordner ../models/ bereit.
Code
TIME ="-"+ time.strftime("%Y%m%d-%H%M")PATH ="../models/"FILE_MUL ="final_model_multiplereg"FORMAT =".pkl"joblib.dump(reg_multi, PATH + FILE_MUL + TIME + FORMAT)final_model_multireg = joblib.load(PATH + FILE_MUL + TIME + FORMAT)
Unser Modell beinhaltet fünf Prädikatoren, da wir den sechsten Prädikator anhand der Stepwise Selection ausgeschlossen haben. Unser Modell deckt 62.5 % der Variation in der Arbeitslosenquote ab und hat einen Mean Squared Error von 1.683, das bedeutet die prognostozierte Arbeitslosenquote im Mittel um 1.683% um den wirklichen Wert streut. Schaut man sich die einzelnen Steigungen an, so sieht man, dass die Christenquote sowie den Akademikerquote die größten Auswirkungen auf das Modell haben. So lässt sich festhalten, wenn bspw. die Christenquote um eine Einheit erhöht und alle weiteren Prädikatoren konstant bleiben, so sinkt die Arbeitslosenquote um 1.373%.
Die Ergebnisse lassen darauf schliessen, dass entweder die Prädikatoren nicht aussagekräftig genug sind, um die Arbeitslosigkeit erklären zu können oder das ein anderes statistisches Modell gewählt werden muss.
Folgende Herausforderungen gab es bei der Durchführung des Projekts:
Herausforderungen:
Verknüpfung zweier Dataframes
Grosser Dataframe, obwohl nur wenige Daten tatsächlich relevant waren.
Ein Grossteil der Zellen relevanter Spalten war leer, da durch die Zensus Umfrage die Werte entweder nicht ermittelt werden konnten oder zu ungenau waren.
Geringe Korrelation zwischen Arbeitslosenquote und den Variablen.
4 Discussion + Conclusion
Aufgrund der durchgeführten Data Corrections wurden die tatsächlich genutzten Zeilen bzw. Gemeinden stark reduziert. Von insgesamt 11.339 Gemeinden wurden schlussendlich nur 1.573 Gemeinden berücksichtigt. Daher wäre es spannend zu wissen, ob die berücksichtigten Gemeinden repräsentativ für ganz Deutschland sind. Hierzu vergleichen wir den original Dataframe mit dem bereinigten Dataframe anhand der berücksichtigten Anzahl Einwohner sowie Anzahl Gemeinden.
Beim Vergleich der Anzahl Einwohner zwischen originalem DF und bereinigtem DF, fällt auf, dass in allen Gemeinden 80.029.997 Einwohner leben. Der bereinigte DF enthält jedoch nur 58.797.595 Einwohner. Die entsprich ca. 73.47 % der gesamten Einwohnerzahl Deutschlands. Die Summe aller Gemeinden beträgt 11.339 Stück. Bereinigt wurden jedoch nur 1.573 Gemeinden berücksichtigt, was einem Anteil von ca. 13.87 % entspricht.
Erkenntnis
Dies lässt darauf schliessen, dass in nur 13.87% der Gemeinden Deutschlands 73.47% der Bevölkerung lebt. Somit wurden für die Untersuchung der Fragestellung überwiegend bevölkerungsreiche Gemeinden berücksichtigt, da kleine Gemeinden tendeziell weniger Angaben machten und somit herausgefiltert wurden.
5 Appendix
5.1 Appendix Predictor Variables
5.1.1 Predictor Variables
Quote
Berechnung
Variable
Migrationshintergrund
Migrationsquote
(Anzahl Personen mit Migrationshintergrund / Anzahl Personen insgesamt)
Religionszugehörigkeit
Christenquote*
(Römisch-katholische Kirche + Evangelische Kirch) / Bevölkerung nach Religion gesamt
Geschlecht
Männerquote
(Anzahl Männer / Einwohner gesamt)
Bildungsniveau
Akademikerquote**
(Fach- oder Berufsakademie + FH-Abschluss + Hochschulabschluss + Promotion) / höchster beruflicher Abschluss insgesamt